package com.bbcare.followup.plat.dto.bo;

import java.util.Comparator;

/**
 * 备乳录入列表的行排序比较器。
 */
public class MilkPatientComparator implements Comparator<Object> {
    @Override
    public int compare(Object o1, Object o2) {
        if (!(o1 instanceof PatientListBO) || !(o2 instanceof PatientListBO)) {
            return -1;
        }

        final PatientListBO pat1    = (PatientListBO)o1;
        final PatientListBO pat2    = (PatientListBO)o2;
        final String bedNo1 = pat1.getHospitalBedNo();
        final String bedNo2 = pat2.getHospitalBedNo();
        if (bedNo1.equals(bedNo2))  {
            return 0;
        }
        if (0 == bedNo1.length() && 0 != bedNo2.length())   {
            return -1;
        }
        if (0 != bedNo1.length() && 0 == bedNo2.length())   {
            return 1;
        }

        if (bedNo1.equals("0") && !bedNo2.equals("0") )  {
            return -1;
        }
        if (!bedNo1.equals("0") && bedNo2.equals("0") )  {
            return 1;
        }
        if (bedNo1.equals("0") && bedNo2.equals("0") )  {
            return 0;
        }

        if (bedNo1.equals("无") && !bedNo2.equals("无") )  {
            return -1;
        }
        if (!bedNo1.equals("无") && bedNo2.equals("无") )  {
            return 1;
        }


        final char flag1    = bedNo1.charAt(0);
        final char flag2    = bedNo2.charAt(0);
        if ('+' != flag1 && '+' != flag2) {
            try {
                return Integer.valueOf(bedNo1).compareTo(Integer.valueOf(bedNo2));
            } catch (NumberFormatException nfe)   {
                return -1;
            }
        } else if ('+' == flag1 && '+' == flag2)    {
            final String subBedno1  = bedNo1.substring(1, bedNo1.length());
            final String subBedno2  = bedNo2.substring(1, bedNo2.length());
            return Integer.valueOf(subBedno1).compareTo(Integer.valueOf(subBedno2));
        } else if ('+' == flag1 && '+' != flag2) {
            return 1;
        } else if ('+' != flag1 && '+' == flag2) {
            return -1;
        }

        return 0;
    }
}
